package com.design.strategy;

import com.design.strategy.service.FlyBehavior;
import com.design.strategy.service.QuackBehavior;

/**
 * @author zhengzihong
 * @version 1.0.0
 * @date 2018/9/8
 * @Description
 */
public abstract class Duck {

    /**
     * 接口类型声明两个引用变量，所有鸭子子类都继承它们。
     */

    /**
     * 喊叫行爲接口
     */
    QuackBehavior quackBehavior;

    /**
     * 飛行的行爲接口
     */
    FlyBehavior flyBehavior;

    public void setQuackBehavior(QuackBehavior quackBehavior){
        this.quackBehavior = quackBehavior;
    }

    public void setFlyBehavior(FlyBehavior flyBehavior){
        this.flyBehavior = flyBehavior;
    }

    /**
     * 表演喊叫
     */
    public void performQuack() {
        quackBehavior.quack();
    }


    /**
     * 表演飞的动作
     */
    public void performFly() {
        flyBehavior.fly();
    }

    public abstract void display();


    public void swim(){
        System.out.println("All duck float, even decoys");
    }

}
